import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { CoreModule } from '@abp/ng.core';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { BasicArchivesRoutingModule } from './basic-archives-routing.module';
import { BASICARCHIVES_ROUTE_PROVIDERS } from './basic-archives.route.module';
import { BASICARCHIVES_UNIQUECODECONFIG_PROVIDERS } from './core/unique-code-config.module';

import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NzFormModule } from 'ng-zorro-antd/form';
import { WidgetModule } from 'joy-abpui-angular';
import { NzButtonModule } from 'ng-zorro-antd/button';
import { NzGridModule } from 'ng-zorro-antd/grid';
import { NzCardModule } from 'ng-zorro-antd/card';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
import { NzTabsModule } from 'ng-zorro-antd/tabs';
import { NzInputModule } from 'ng-zorro-antd/input';
import { NzIconModule } from 'ng-zorro-antd/icon';
import { NzTreeViewModule } from 'ng-zorro-antd/tree-view';
import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';
import { NzTableModule } from 'ng-zorro-antd/table';
import { NzModalModule } from 'ng-zorro-antd/modal';
import { NzDrawerModule } from 'ng-zorro-antd/drawer';
import { NzPopconfirmModule } from 'ng-zorro-antd/popconfirm';
import { NzSwitchModule } from 'ng-zorro-antd/switch';
import { NzToolTipModule } from 'ng-zorro-antd/tooltip';
import { NzSelectModule } from 'ng-zorro-antd/select';
import { NzInputNumberModule } from 'ng-zorro-antd/input-number';
import { NzDatePickerModule } from 'ng-zorro-antd/date-picker';
import { NzTagModule } from 'ng-zorro-antd/tag';
import { NzMessageModule } from 'ng-zorro-antd/message';
import { NzDividerModule } from 'ng-zorro-antd/divider';
import { NzPageHeaderModule } from 'ng-zorro-antd/page-header';
import { NzSpinModule } from 'ng-zorro-antd/spin';
import { NzProgressModule } from 'ng-zorro-antd/progress';
import { NzRadioModule } from 'ng-zorro-antd/radio';

import { AdvancedFilterDialogComponent } from './core/advanced-filter-dialog/advanced-filter-dialog.component';
import { FilterGroupComponent } from './core/advanced-filter-dialog/filter-group.component';
import { DynamicSegmentConfigurationComponent } from './core/dynamic-segment-configuration.component';
import { FixedSegmentComponent } from './core/fixed-segment.component';
import { SerialNumberSegmentComponent } from './core/serial-number-segment.component';
import { TimeStampSegmentComponent } from './core/time-stamp-segment.component';
import { UniqueCodeSettingComponent } from './core/unique-code-setting/unique-code-setting.component';
import { ItemCategoryDetailComponent } from './item-masters/item-category-detail/item-category-detail.component';
import { ItemCategoryRefEntityComponent } from './item-masters/item-category-ref-entity/item-category-ref-entity.component';
import { UnitListComponent } from './item-masters/unit-list/unit-list.component';
import { UnitDawEntityComponent } from './item-masters/unit-daw-entity/unit-daw-entity.component';
import { UnitGroupDawMultiEntityComponent } from './item-masters/unit-group-daw-multi-entity/unit-group-daw-multi-entity.component';
import { UnitGroupListComponent } from './item-masters/unit-group-list/unit-group-list.component';
import { SegmentConfigrationRefEntityComponent } from './core/segment-configration-ref-entity/segment-configration-ref-entity.component';
import { TableSettingsDialogComponent } from './core/table-settings-dialog/table-settings-dialog.component';
import { UnitRefSelectComponent } from './item-masters/unit-ref-select/unit-ref-select.component';
import { ItemMasterListComponent } from './item-masters/item-master-list/item-master-list.component';
import { ItemMasterDawEntityComponent } from './item-masters/item-master-daw-entity/item-master-daw-entity.component';
import { ItemMasterRefSelectComponent } from './item-masters/item-master-ref-select/item-master-ref-select.component';
import { UnitGroupRefSelectComponent } from './item-masters/unit-group-ref-select/unit-group-ref-select.component';
import { UnitGroupRefChildrenSelectComponent } from './item-masters/unit-group-ref-children-select/unit-group-ref-children-select.component';
import { BillOfMaterialsListComponent } from './item-masters/bill-of-materials-list/bill-of-materials-list.component';
import { BillOfMaterialsDawEntityComponent } from './item-masters/bill-of-materials-daw-entity/bill-of-materials-daw-entity.component';
import { BillOfMaterialsRefEntityComponent } from './item-masters/bill-of-materials-ref-entity/bill-of-materials-ref-entity.component';
import { BomMasterListComponent } from './item-masters/bom-master-list/bom-master-list.component';
import { BomMasterDawDocumentComponent } from './item-masters/bom-master-daw-document/bom-master-daw-document.component';
import { DepartmentDetailComponent } from './staff/department-detail/department-detail.component';
import { DepartmentRefEntityComponent } from './staff/department-ref-entity/department-ref-entity.component';
import { OperatorListComponent } from './staff/operator-list/operator-list.component';
import { OperatorDawEntityComponent } from './staff/operator-daw-entity/operator-daw-entity.component';
import { OperatorRefSelectComponent } from './staff/operator-ref-select/operator-ref-select.component';
import { CustomerTypeDetailComponent } from './customers/customer-type-detail/customer-type-detail.component';
import { CustomerTypeRefEntityComponent } from './customers/customer-type-ref-entity/customer-type-ref-entity.component';
import { CustomerListComponent } from './customers/customer-list/customer-list.component';
import { CustomerDawEntityComponent } from './customers/customer-daw-entity/customer-daw-entity.component';
import { CustomerRefSelectComponent } from './customers/customer-ref-select/customer-ref-select.component';
import { SupplierTypeDetailComponent } from './suppliers/supplier-type-detail/supplier-type-detail.component';
import { SupplierTypeRefEntityComponent } from './suppliers/supplier-type-ref-entity/supplier-type-ref-entity.component';
import { SupplierListComponent } from './suppliers/supplier-list/supplier-list.component';
import { SupplierDawEntityComponent } from './suppliers/supplier-daw-entity/supplier-daw-entity.component';
import { SupplierRefSelectComponent } from './suppliers/supplier-ref-select/supplier-ref-select.component';
import { WarehouseListComponent } from './storage/warehouse-list/warehouse-list.component';
import { WarehouseDawEntityComponent } from './storage/warehouse-daw-entity/warehouse-daw-entity.component';
import { WarehouseRefSelectComponent } from './storage/warehouse-ref-select/warehouse-ref-select.component';
import { WorkCenterListComponent } from './production-unit/work-center-list/work-center-list.component';
import { WorkCenterDawEntityComponent } from './production-unit/work-center-daw-entity/work-center-daw-entity.component';
import { WorkCenterRefSelectComponent } from './production-unit/work-center-ref-select/work-center-ref-select.component';
import { EquipmentListComponent } from './production-unit/equipment-list/equipment-list.component';
import { EquipmentDawEntityComponent } from './production-unit/equipment-daw-entity/equipment-daw-entity.component';
import { EquipmentRefSelectComponent } from './production-unit/equipment-ref-select/equipment-ref-select.component';
import { SaleOrderTypeListComponent } from './sales/sale-order-type-list/sale-order-type-list.component';
import { SaleOrderTypeDawEntityComponent } from './sales/sale-order-type-daw-entity/sale-order-type-daw-entity.component';
import { SaleOrderTypeRefSelectComponent } from './sales/sale-order-type-ref-select/sale-order-type-ref-select.component';
import { SaleOrderListComponent } from './sales/sale-order-list/sale-order-list.component';
import { SaleOrderDawDocumentComponent } from './sales/sale-order-daw-document/sale-order-daw-document.component';
import { IntentOrderTypeListComponent } from './sales/intent-order-type-list/intent-order-type-list.component';
import { IntentOrderTypeDawEntityComponent } from './sales/intent-order-type-daw-entity/intent-order-type-daw-entity.component';
import { IntentOrderTypeRefSelectComponent } from './sales/intent-order-type-ref-select/intent-order-type-ref-select.component';
import { IntentOrderListComponent } from './sales/intent-order-list/intent-order-list.component';
import { IntentOrderDawDocumentComponent } from './sales/intent-order-daw-document/intent-order-daw-document.component';
import { AsnTypeListComponent } from './asns/asn-type-list/asn-type-list.component';
import { AsnTypeDawEntityComponent } from './asns/asn-type-daw-entity/asn-type-daw-entity.component';
import { AsnTypeRefSelectComponent } from './asns/asn-type-ref-select/asn-type-ref-select.component';
import { AsnListComponent } from './asns/asn-list/asn-list.component';
import { AsnDawDocumentComponent } from './asns/asn-daw-document/asn-daw-document.component';
import { ReceivementTypeListComponent } from './receipt/receivement-type-list/receivement-type-list.component';
import { ReceivementTypeDawEntityComponent } from './receipt/receivement-type-daw-entity/receivement-type-daw-entity.component';
import { ReceivementTypeRefSelectComponent } from './receipt/receivement-type-ref-select/receivement-type-ref-select.component';
import { ReceivementListComponent } from './receipt/receivement-list/receivement-list.component';
import { ReceivementDawDocumentComponent } from './receipt/receivement-daw-document/receivement-daw-document.component';
import { ProductionPlatformComponent } from './pmc/production-platform/production-platform.component';
import { MaterialManagementPlatformComponent } from './pmc/material-management-platform/material-management-platform.component';

import { UniqueCodeConfigService } from './core/unique-code-config.service';
import { UnitRefSelectService } from './item-masters/unit-ref-select/unit-ref-select.services';
import { UniqueCodeSettingService } from './core/unique-code-setting/unique-code-setting.service';
import { AdvancedFilterDialogService } from './core/advanced-filter-dialog/advanced-filter-dialog.service';
import { TableSettingsDialogService } from './core/table-settings-dialog/table-settings-dialog.service';
import { ReceivementTypeRefSelectService } from './receipt/receivement-type-ref-select/receivement-type-ref-select.services';
import { ExportExcelService } from './core/export-excel.service';
import { ItemCategoryRefEntityService } from './item-masters/item-category-ref-entity/item-category-ref-entity.service';
import { BillOfMaterialsRefEntityService } from './item-masters/bill-of-materials-ref-entity/bill-of-materials-ref-entity.service';
import { ItemMasterRefSelectService } from './item-masters/item-master-ref-select/item-master-ref-select.services';
import { UnitGroupRefSelectService } from './item-masters/unit-group-ref-select/unit-group-ref-select.services';
import { UnitGroupRefChildrenSelectService } from './item-masters/unit-group-ref-children-select/unit-group-ref-children-select.services';
import { DepartmentRefEntityService } from './staff/department-ref-entity/department-ref-entity.service';
import { OperatorRefSelectService } from './staff/operator-ref-select/operator-ref-select.services';
import { CustomerTypeRefEntityService } from './customers/customer-type-ref-entity/customer-type-ref-entity.service';
import { CustomerRefSelectService } from './customers/customer-ref-select/customer-ref-select.services';
import { SupplierTypeRefEntityService } from './suppliers/supplier-type-ref-entity/supplier-type-ref-entity.service';
import { SupplierRefSelectService } from './suppliers/supplier-ref-select/supplier-ref-select.services';
import { WarehouseRefSelectService } from './storage/warehouse-ref-select/warehouse-ref-select.services';
import { WorkCenterRefSelectService } from './production-unit/work-center-ref-select/work-center-ref-select.services';
import { EquipmentRefSelectService } from './production-unit/equipment-ref-select/equipment-ref-select.services';
import { SaleOrderTypeRefSelectService } from './sales/sale-order-type-ref-select/sale-order-type-ref-select.services';
import { IntentOrderTypeRefSelectService } from './sales/intent-order-type-ref-select/intent-order-type-ref-select.services';
import { PurchaseOrderTypeListComponent } from './procurements/purchase-order-type-list/purchase-order-type-list.component';
import { PurchaseOrderTypeDawEntityComponent } from './procurements/purchase-order-type-daw-entity/purchase-order-type-daw-entity.component';
import { PurchaseOrderTypeRefSelectComponent } from './procurements/purchase-order-type-ref-select/purchase-order-type-ref-select.component';
import { PurchaseOrderTypeRefSelectService } from './procurements/purchase-order-type-ref-select/purchase-order-type-ref-select.services';
import { PurchaseOrderListComponent } from './procurements/purchase-order-list/purchase-order-list.component';
import { PurchaseOrderDawDocumentComponent } from './procurements/purchase-order-daw-document/purchase-order-daw-document.component';
import { PurchaseRequisitionTypeListComponent } from './procurements/purchase-requisition-type-list/purchase-requisition-type-list.component';
import { PurchaseRequisitionTypeDawEntityComponent } from './procurements/purchase-requisition-type-daw-entity/purchase-requisition-type-daw-entity.component';
import { PurchaseRequisitionTypeRefSelectComponent } from './procurements/purchase-requisition-type-ref-select/purchase-requisition-type-ref-select.component';
import { PurchaseRequisitionTypeRefSelectService } from './procurements/purchase-requisition-type-ref-select/purchase-requisition-type-ref-select.services';
import { AsnTypeRefSelectService } from './asns/asn-type-ref-select/asn-type-ref-select.services';
import { PlanOrderTypeRefSelectService } from './production/plan-order-type-ref-select/plan-order-type-ref-select.services';
import { PurchaseRequisitionListComponent } from './procurements/purchase-requisition-list/purchase-requisition-list.component';
import { PurchaseRequisitionDawDocumentComponent } from './procurements/purchase-requisition-daw-document/purchase-requisition-daw-document.component';
import { PlanOrderTypeListComponent } from './production/plan-order-type-list/plan-order-type-list.component';
import { PlanOrderTypeDawEntityComponent } from './production/plan-order-type-daw-entity/plan-order-type-daw-entity.component';
import { PlanOrderTypeRefSelectComponent } from './production/plan-order-type-ref-select/plan-order-type-ref-select.component';
import { PlanOrderListComponent } from './production/plan-order-list/plan-order-list.component';
import { PlanOrderDawDocumentComponent } from './production/plan-order-daw-document/plan-order-daw-document.component';
import { ProductionOrderTypeListComponent } from './production/production-order-type-list/production-order-type-list.component';
import { ProductionOrderTypeDawEntityComponent } from './production/production-order-type-daw-entity/production-order-type-daw-entity.component';
import { ProductionOrderTypeRefSelectComponent } from './production/production-order-type-ref-select/production-order-type-ref-select.component';
import { ProductionOrderTypeRefSelectService } from './production/production-order-type-ref-select/production-order-type-ref-select.services';
import { ProductionOrderListComponent } from './production/production-order-list/production-order-list.component';
import { ProductionOrderDawDocumentComponent } from './production/production-order-daw-document/production-order-daw-document.component';

import { ArchivesSyncComponent } from './sync/archives-sync/archives-sync.component';
import { DocumentSyncComponent } from './sync/document-sync/document-sync.component';

@NgModule({
  declarations: [
    AdvancedFilterDialogComponent,
    FilterGroupComponent,
    DynamicSegmentConfigurationComponent,
    FixedSegmentComponent,
    SerialNumberSegmentComponent,
    TimeStampSegmentComponent,
    UniqueCodeSettingComponent, 
    ItemCategoryDetailComponent, 
    ItemCategoryRefEntityComponent, 
    UnitListComponent, 
    UnitDawEntityComponent,
    UnitGroupListComponent, 
    UnitGroupDawMultiEntityComponent,
    SegmentConfigrationRefEntityComponent,
    TableSettingsDialogComponent,
    UnitRefSelectComponent,
    ItemMasterListComponent,
    ItemMasterDawEntityComponent,
    ItemMasterRefSelectComponent,
    UnitGroupRefSelectComponent,
    UnitGroupRefChildrenSelectComponent,
    BillOfMaterialsListComponent,
    BillOfMaterialsDawEntityComponent,
    BillOfMaterialsRefEntityComponent,
    BomMasterListComponent,
    BomMasterDawDocumentComponent,
    DepartmentDetailComponent,
    DepartmentRefEntityComponent,
    OperatorListComponent,
    OperatorDawEntityComponent,
    OperatorRefSelectComponent,
    CustomerTypeDetailComponent,
    CustomerTypeRefEntityComponent,
    CustomerListComponent,
    CustomerDawEntityComponent,
    CustomerRefSelectComponent,
    SupplierTypeDetailComponent,
    SupplierTypeRefEntityComponent,
    SupplierListComponent,
    SupplierDawEntityComponent,
    SupplierRefSelectComponent,
    WarehouseListComponent,
    WarehouseDawEntityComponent,
    WarehouseRefSelectComponent,
    WorkCenterListComponent,
    WorkCenterDawEntityComponent,
    WorkCenterRefSelectComponent,
    EquipmentListComponent,
    EquipmentDawEntityComponent,
    EquipmentRefSelectComponent,
    SaleOrderTypeListComponent,
    SaleOrderTypeDawEntityComponent,
    SaleOrderTypeRefSelectComponent,
    SaleOrderListComponent,
    SaleOrderDawDocumentComponent,
    IntentOrderTypeListComponent,
    IntentOrderTypeDawEntityComponent,
    IntentOrderTypeRefSelectComponent,
    IntentOrderListComponent,
    IntentOrderDawDocumentComponent,
    AsnTypeListComponent,
    AsnTypeDawEntityComponent,
    AsnTypeRefSelectComponent,
    AsnListComponent,
    AsnDawDocumentComponent,
    ReceivementTypeListComponent,
    ReceivementTypeDawEntityComponent,
    ReceivementTypeRefSelectComponent,
    ReceivementListComponent,
    ReceivementDawDocumentComponent,
    PurchaseOrderTypeListComponent,
    PurchaseOrderTypeDawEntityComponent,
    PurchaseOrderTypeRefSelectComponent,
    PurchaseOrderListComponent,
    PurchaseOrderDawDocumentComponent,
    PurchaseRequisitionTypeListComponent,
    PurchaseRequisitionTypeDawEntityComponent,
    PurchaseRequisitionTypeRefSelectComponent,
    PurchaseRequisitionListComponent,
    PurchaseRequisitionDawDocumentComponent,
    PlanOrderTypeListComponent,
    PlanOrderTypeDawEntityComponent,
    PlanOrderTypeRefSelectComponent,
    PlanOrderListComponent,
    PlanOrderDawDocumentComponent,
    ProductionOrderTypeListComponent,
    ProductionOrderTypeDawEntityComponent,
    ProductionOrderTypeRefSelectComponent,
    ProductionOrderListComponent,
    ProductionOrderDawDocumentComponent,
    ArchivesSyncComponent,
    DocumentSyncComponent,
    ProductionPlatformComponent,
    MaterialManagementPlatformComponent,
  ],
  imports: [
    CommonModule,
    CoreModule,
    ThemeSharedModule,
    BasicArchivesRoutingModule,
    FormsModule,
    ReactiveFormsModule,
    NzFormModule,
    WidgetModule,
    NzButtonModule,
    NzGridModule,
    NzCardModule,
    NzCheckboxModule,
    NzTabsModule,
    NzInputModule,
    NzIconModule,
    NzTreeViewModule,
    NzDropDownModule,
    NzTreeSelectModule,
    NzTableModule,
    NzModalModule,
    NzDrawerModule,
    NzPopconfirmModule,
    NzSwitchModule,
    NzToolTipModule,
    NzSelectModule,
    NzInputNumberModule,
    NzDatePickerModule,
    NzTagModule,
    NzMessageModule,
    NzDividerModule,
    NzPageHeaderModule,
    NzSpinModule,
    NzProgressModule,
    NzRadioModule,
  ],
  providers: [
    AdvancedFilterDialogService,
    TableSettingsDialogService,
    UniqueCodeSettingService,
    UniqueCodeConfigService,
    ExportExcelService,
    ItemCategoryRefEntityService,
    BillOfMaterialsRefEntityService,
    UnitRefSelectService,
    ItemMasterRefSelectService,
    UnitGroupRefSelectService,
    UnitGroupRefChildrenSelectService,
    DepartmentRefEntityService,
    OperatorRefSelectService,
    CustomerTypeRefEntityService,
    CustomerRefSelectService,
    SupplierTypeRefEntityService,
    SupplierRefSelectService,
    WarehouseRefSelectService,
    WorkCenterRefSelectService,
    EquipmentRefSelectService,
    SaleOrderTypeRefSelectService,
    IntentOrderTypeRefSelectService,
    PurchaseOrderTypeRefSelectService,
    PurchaseRequisitionTypeRefSelectService,
    AsnTypeRefSelectService,
    PlanOrderTypeRefSelectService,
    ProductionOrderTypeRefSelectService,
    ReceivementTypeRefSelectService,
  ],
  exports: [
    AdvancedFilterDialogComponent,
    FilterGroupComponent,
    TableSettingsDialogComponent,
    UnitRefSelectComponent,
    ItemMasterRefSelectComponent,
    UnitGroupRefSelectComponent,
    UnitGroupRefChildrenSelectComponent,
    OperatorRefSelectComponent,
    SupplierRefSelectComponent,
    WarehouseRefSelectComponent,
    WorkCenterRefSelectComponent
  ]
})
export class BasicArchivesModule {
  static forRoot(): ModuleWithProviders<BasicArchivesModule> {
    return {
      ngModule: BasicArchivesModule,
      providers: [BASICARCHIVES_ROUTE_PROVIDERS, BASICARCHIVES_UNIQUECODECONFIG_PROVIDERS],
    };
  }
}
